package predicate;


import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;

/***
 * JDK 1.8 API 包含了很多内置的函数式接口。
 * 其中就包括我们在老版本中经常见到的 Comparator 和 Runnable，Java 8 为他们都添加了 @FunctionalInterface 注解，
 * 以用来支持 Lambda 表达式。
 */
public class predicateDemo {


    /***
     * predicate 是一个可以指定入参类型。并返回boolean值的函数式接口。它内部提供了一些带有默认实现方法，可以被用
     * 来组合一个复杂逻辑判断
     * @param args
     */
    public static void main(String[] args){
        Predicate<String> predicate = (s) -> s.length() > 0;

        boolean flag = predicate.test("foo");
        System.out.println(flag);
        boolean flag_1 = predicate.negate().test("foo");
        System.out.println(flag_1);


        Predicate<Boolean> nonNull = Objects::nonNull;
        Predicate<Boolean> isNull = Objects:: isNull;
//        Predicate<Boolean> isEmpty = String :: isEmpty;
        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isNotEmpty = isEmpty.negate();




    }
}
